Python开发串口通讯上位机程序三部曲 第一部 从串口发送指令并读取数据 您所在的位置:网站首页 fifa21生涯模式 潜力 Python开发串口通讯上位机程序三部曲 第一部 从串口发送指令并读取数据

Python开发串口通讯上位机程序三部曲 第一部 从串口发送指令并读取数据

2023-08-16 21:28| 来源: 网络整理| 查看: 265

**

Python开发串口通讯上位机程序三部曲

**

2020很特殊!这个春节假期,除了吃饭、睡觉、追剧、忧国忧民以外,仍然有大把的闲暇时间想想工作的事情。记得之前在很多项目开发中,都需要通过上位机来控制ECU或者通过上位机来读取ECU中的数据。其中上位机和ECU的通讯接口有串口,LIN或者CAN总线。串口作为一种低成本而又简单的通讯方式,仍然有很多客户在使用。毕竟,一个USB转串口工具,淘宝网上只要几十块就可以买一个,而LIN总线或CAN总线转换接口,成本至少在几百元以上。 在这里插入图片描述 要实现上位机和ECU之间的串口通讯,除了一个USB转串口硬件工具以外,还需要一个上位机软件。上位机软件可以采用串口调试助手(可以从网上免费下载),但是很多情况下,串口调试助手无法满足控制和数据监视,以及分析功能,还需要根据项目需求,进行定制化开发。定制化开发串口上位机可以采用Visual Basic、Visual C#、labview等软件开发。这些软件特别适合于开发图形化界面。但是这几个软件需要占用很大的硬盘空间,而且对于文件操作,数据记录等并不是特别方便。最近听说python很火,一直好奇能否用python开发一个串口上位机软件,经过这几天的尝试,终于成功了。接下来给大家分享一下。 在这里插入图片描述

安装python开发环境 首先到python官网https://www.python.org/downloads/windows/下载python软件。如下图所示,最新版本为3.8. 本人的电脑是WIN 10 64位操作系统,需要下载的文件为:Windows x86-64 executable installer(64位操作系统一定要下载这个文件,如果下载32位的文件,后果自负)下载好的文件名为:python-3.8.1-amd64.exe.双击这个文件,进行安装。安装时,选择Add python3.8 to PATH。这一点也非常重要!选中这个框,后续会省去很多麻烦的。单击Install Now, 可以用默认的安装路径安装。在这里插入图片描述安装完成后,在运行窗口或者win10的搜索窗口中输入”cmd”,打开DOS窗口在这里插入图片描述在DOS窗口中出现:C:\Windows\system32>,然后输入python, 回车,出现如上图所示的内容,以及“>>>”,说明python已经安装成功。然后在>>>后面,输入exit()可以退出。在win10程序中,可以发现新安装的程序:IDLE (python 3.8 64-bit)。运行这个程序,出现IDLE开发环境界面在这里插入图片描述在IDLE界面中的File菜单中可以创建一个新文件,我们的python上位机程序就可以存储在这个新文件中。好的!我们已经顺利完成第一步,比起Visual studio和LabVIEW,是不是又快又简单啊?先喝杯酒庆祝一下吧! 安装pyserial模块 Python的最大优点是共享和开源,有很多工程师已经开发了很多程序模块,并且无私奉献出来,我们可以直接利用这些现成的模块。是不是相当于踩在巨人的肩膀上一样啊?所以首先我们要感谢一下这些前辈们!他们已经把串行通讯的代码封装在了pyserial模块中(即便封装好,你也可以看到源代码的),接下来我们可以直接安装这个模块了。大家还记得把大象放进冰箱的三步法吗,那么我们安装pyserial是不是也要经过找到网址,下载软件,安装软件三步法呢?No! 让我们一起见证奇迹是如何发生的吧:运行cmd把DOS窗口打开,在C:\Windows\system32>后面直接输入”pip install pyserial”,然后系统会自动搜索下载链接,下载并且安装,一步搞定!在C:\Windows\system32>后输入”python”,回车,当出现“>>>”以后,输入import serial, 导入pyserial模块。然后在“>>>”之后,输入“serial”,可以看到pyserial被安装到的文件夹。好的,pyserial安装也搞定了!在这里插入图片描述 编写串口上位机软件

编写串口上位机软件:

功能说明: 上位机首先向ECU发出指令:控制命令(用字母c表示),读取数据指令(用字母r表示)ECU收到指令后,进行处理,如果是c,则将LED蓝灯点亮;如果是r,则将LED红灯点亮,并向上位机发送0x30到0x39的十个数字。上位机发出r指令后,等待接收数据,接收到数据以后,将数据输出到屏幕。 重复以上步骤,如果输入字母n,则退出上位机 软件流程图如下: 在这里插入图片描述 打开IDLE软件,创建一个新文件,并且保存为SCI.py 在这里插入图片描述编写上位机界面程序 import serial #导入串口模块 import time #导入时间模块,时间模块是Python自带模块,无需安装 try: #打开串口,并且获得串口对象 SCI1 = serial.Serial("com15",9600,timeout=50) #判断是否打开成功 if (SCI1.isOpen()==True): print("串口已经打开!") except Exception as exc: print("串口打开异常:",exc) while True: commandFromECU = input("请输入控制命令,c-向ECU发送命令;r-从ECU中读取数据。") #从键盘上输入一个命令 SCI1.write(str(commandFromECU).encode("utf-8")) #将键盘输入的控制命令发送给ECU上的单片机 if commandFromECU == 'r': #如果是读取数据,则从串口中接收数据。 time.sleep(1) #等待1秒,等待接收ECU上单片机返回的数据. ECU会依次发送0x30-0x39等10个数据 bufferSize = SCI1.in_waiting #接收ECU上单片机发过来的数据,并且返回数据的大小 print("接收到",str(bufferSize),'个数据') #打印缓冲区中接收到数据的个数 data = SCI1.read_all().hex() #将接收缓冲区中数据读取到data中 print(data) #将接收到的数据按照16进制打印出来 time.sleep(1) #等待1秒 if(input("如果退出,请输入n,如果继续发送命令,请按其他键 ") == 'n'): break SCI1.close() #关闭端口

在Run菜单中,选择Run Module或者直接按F5键,运行程序,界面如下: 在这里插入图片描述好的,大功告成!我们已经完成了上位机和ECU之间的基本通讯流程。是不是软件非常简单呢?个人认为这个是python最大的优点:简约而不简单!

总结

我们再回顾一下python开发一个基于串口通讯的上位机程序的步骤:

到python.org下载python 3.8 64-bit并安装使用pip install pyserial安装serial模块编写上位机和ECU的通讯流程,画出软件流程图,编写代码,运行测试程序

熟悉了这个程序以后,我们还可以在这个程序上增加更多的功能:

将收到的数据,打印曲线,用图形显示出来。这个需要用到自带的turtle画图模块将收到的数据,保存到txt, csv文件中。将收到的数据,自动发送到邮件中。

以上每个功能的实现,也只需要几行代码就可以实现,接下来的几年里,我会慢慢介绍给大家。好的,如果大家觉得这个串口好用的话,赶紧把电脑拿出来试一试吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有